\section{Description de la structure du fichier intermédiaire}
\label{xml-struct}

La structure du fichier intermédiaire se rapproche de celle de l'ancien fichier, à savoir que les informations sont regroupées dans des blocs d'informations correspondant aux éléments composant un programme. Chaque bloc est précédé d'un bloc en-tête (bloc \textit{header}) qui permet d'indiquer au lecteur du fichier quel est le bloc qui suit mais nous reviendrons là-dessus plus tard. Voyons les différents blocs d'informations possibles : \\

\begin{itemize}
	\item le bloc \textit{header} qui indique le type de bloc d'informations qui suit;
	\item le bloc \textit{channel} qui reprend les informations d'un canal de communication;
	\item le bloc \textit{type} qui reprend les informations concernant un type spécifique défini par le programmeur;
	\item le bloc \textit{variable} qui reprend les informations d'une variable dans le programme;
	\item le bloc \textit{start\_node} qui indique le début d'une liste d'instructions;
	\item le bloc \textit{instruction} qui reprend les informations d'une ligne d'instruction;
	\item le bloc \textit{operation} qui reprend les informations d'une opération dans le programme (c'est-à-dire, une partie d'une instruction);
	\item le bloc \textit{method} qui reprend les informations d'une méthode du programme;
	\item le bloc \textit{statements} qui reprend les informations d'un \texttt{WHEN} ou du contenu du bloc de code \texttt{PROGRAM}.
\end{itemize}
\bigskip

Donc, dans le programme, pour chaque variable déclarée, par exemple, il y aura un bloc \textit{header}, suivi d'un bloc \textit{variable} dans le fichier XML qui reprendra les informations concernant cette variable. Les deux blocs se suivent et ne sont pas imbriqués, principalement pour des raisons de facilité dans la lecture et l'extraction des informations contenues dans le fichier XML. \\

Pour continuer, deux classifications des blocs d'informations doivent être faites. La première différencie les blocs ``primaires'' des blocs ``composés'', tandis que la seconde différencie les blocs d'informations ``fixes'' des blocs d'informations ``variables''~\footnote{Ces quatre appellations ont été inventées pour la rédaction de ce rapport. Il ne s'agit en aucun cas d'appellations standard.}. Un bloc dit ``primaire'' est un bloc qui contient des informations de base, telles qu'un identifiant, un label, etc. Un bloc dit ``composé'' est un bloc primaire qui, en plus, contient au moins un autre bloc d'information. Un bloc dit ``fixe'' est un bloc qui contient un nombre donné d'informations bien définies, qui ne changera pas. À l'inverse, un bloc dit ``variable'' contiendra un nombre d'informations pouvant changer selon une des valeurs de ce bloc. Voyons la classification des différents blocs d'informations définis ci-dessus: \\

\begin{center}
	\begin{tabular}{|r|l|l|}\hline 
		& Fixes & Variables \\
		\hline
		\multirow{4}{*}{ \begin{sideways} Primaires \end{sideways}} 
			& \textit{header} & \textit{operation} \\ 
			& \textit{channel} &  \\
			& \textit{variable} &  \\
			& \textit{start\_node} &  \\
			\hline
		\multirow{4}{*}{ \begin{sideways} Composés \end{sideways}} 
			&  & \textit{type} \\ 
			&  & \textit{instruction} \\
			&  & \textit{method} \\
			&  & \textit{statements} \\
		\hline
	\end{tabular}
\end{center}
\bigskip

Ces différents types de blocs d'informations compliquent énormément le module de lecture et d'écriture du fichier XML puisqu'il faut tenir compte de toutes les possibilités (dans le cas d'un bloc d'informations variables) mais aussi bien récupérer toutes les informations qui peuvent être contenues dans d'autres blocs (dans le cas d'un bloc composé).